有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何连接到用户选择的SSID?

我正在完成我的论文,我正在开发一个ANdroid应用程序来配置物联网家用设备(wifi)。在这种情况下,使用Rspberry Pi 3模拟设备,它创建一个具有已知名称(即AutoDevAP NameOfDevice)的接入点(捕获门户,无密码)。我的应用程序正在智能手机的范围内显示现有的SSID,并允许用户选择其中一个SSID并进行连接(在这种情况下,应用程序仅用于连接此类型的SSID。问题是:在用户选择要连接的SSID(AutoDevAP SmartSwitch)后,我启动另一个活动以连接到此SSID,但是我被卡住了,因为智能手机从未连接到它,我使用的逻辑与我开发应用程序时使用的逻辑相同,总是连接到同一个SSID,而不使用密码,但它不会工作。起初我教他们问题出在适配器侦听器上,但我已经调试了代码,并不是那个问题。 它正在接受棒棒糖测试

我的代码:MainActivity。爪哇

import 安卓.app.Activity;
import 安卓.content.BroadcastReceiver;
import 安卓.content.Context;
import 安卓.content.Intent;
import 安卓.content.IntentFilter;
import 安卓.net.wifi.ScanResult;
import 安卓.net.wifi.WifiConfiguration;
import 安卓.net.wifi.WifiManager;
import 安卓.os.Handler;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.os.Bundle;
import 安卓.util.Log;
import 安卓.view.Menu;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓.widget.AdapterView;
import 安卓.widget.ArrayAdapter;
import 安卓.widget.ListView;
import 安卓.widget.Toast;
import 安卓.widget.ToggleButton;

import java.util.List;

public class MainActivity extends Activity {


    WifiManager wifiManager;
    private BroadcastReceiver wifiReciever;
    private ArrayAdapter adapter;
    ListView listview ;
    private String nameOfDev;
    private Handler mainHandler;
    private Thread connectAPThread;
    static String info = null;
    static String ssidInfo;
    static String devName;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listview= (ListView) findViewById(R.id.listView);
        adapter = new ArrayAdapter
                (this,安卓.R.layout.simple_list_item_1);

        listview.setAdapter(adapter);

        wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        mainHandler = new Handler(this.getMainLooper());


        wifiReciever = new WiFiScanReceiver();
        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                String s = listview.getItemAtPosition(i).toString();
                info =s;
                Toast.makeText(getApplicationContext(), info, Toast.LENGTH_LONG).show();
                ssidInfo= getSSIDInfo(info);
                Toast.makeText(getApplicationContext(), ssidInfo, Toast.LENGTH_SHORT).show();
                devName=getDeviceName(info);
                Toast.makeText(getApplicationContext(), devName, Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(MainActivity.this,ConnectWifiActivity.class);
                intent.putExtra("ssid",ssidInfo);
                intent.putExtra("devName",devName);
                startActivity(intent);

            }
        });
    }


    public String getSSIDInfo(String s){
        String[] things = s.split(",");
        String[] cenas = things[0].split(":");
        String ssid = cenas[1];
//        Toast.makeText(getApplicationContext(), ssid, Toast.LENGTH_LONG).show();

       // Toast.makeText(getApplicationContext(), nameOfDev, Toast.LENGTH_LONG).show();
       return ssid;

    }

    public String getDeviceName(String s){
        String[] things = s.split(",");
        String[] cenas = things[0].split(":");
        String ssid = cenas[1];
//        Toast.makeText(getApplicationContext(), ssid, Toast.LENGTH_LONG).show();
        String[] outras = ssid.split("-");
        String nameOfDev = outras[1];
        // Toast.makeText(getApplicationContext(), nameOfDev, Toast.LENGTH_LONG).show();
        return nameOfDev;

    }
    public void onToggleClicked(View view) {

        adapter.clear();

        ToggleButton toggleButton = (ToggleButton) view;

        if (wifiManager == null) {
            // Device does not support Wi-Fi
            Toast.makeText(getApplicationContext(), "Oop! Your device does not support Wi-Fi",
                    Toast.LENGTH_SHORT).show();
            toggleButton.setChecked(false);

        } else {
            if (toggleButton.isChecked()) { // To turn on Wi-Fi


                    Toast.makeText(getApplicationContext(), "Wi-Fi is turning on." +
                                    "\n" + "Scanning for access points...",
                            Toast.LENGTH_SHORT).show();

                    wifiManager.setWifiEnabled(true);

                    Toast.makeText(getApplicationContext(), "Wi-Fi is already turned on." +
                                    "\n" + "Scanning for access points...",
                            Toast.LENGTH_SHORT).show();
                 wifiManager.startScan();

            } else { // To turn off Wi-Fi
                Toast.makeText(getApplicationContext(), "Wi-Fi is turned off.",
                        Toast.LENGTH_SHORT).show();
                wifiManager.setWifiEnabled(false);
            }
        }
    }


protected void onResume() {
    super.onResume();
    // Register the BroadcastReceiver for SCAN_RESULTS_AVAILABLE_ACTION
    IntentFilter filter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
    registerReceiver(wifiReciever, filter);
}

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(wifiReciever);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.wi_fi, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }



    class WiFiScanReceiver extends BroadcastReceiver {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {
                List<ScanResult> wifiScanResultList = wifiManager.getScanResults();
                for(int i = 0; i < wifiScanResultList.size(); i++){
                    String hotspot = (wifiScanResultList.get(i)).toString();
                    adapter.add(hotspot);

                }
            }
        }
    }
}

主要活动。xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:tools="http://schemas.安卓.com/tools"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"

    tools:context="bernardo.autodevconfiguration.MainActivity">

    <ToggleButton
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:id="@+id/toggleButton"
        安卓:textOn="Wi-Fi On"
        安卓:textOff="Wi-Fi Off"
        安卓:onClick="onToggleClicked"
        安卓:layout_alignParentTop="true"
        安卓:layout_alignParentLeft="true"
        安卓:layout_alignParentStart="true" />

    <ListView
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:id="@+id/listView"
        安卓:layout_centerHorizontal="true"
        安卓:layout_below="@+id/toggleButton" />

</RelativeLayout>

连接活动。爪哇

import 安卓.app.Activity;
import 安卓.content.Context;
import 安卓.content.Intent;
import 安卓.net.wifi.WifiConfiguration;
import 安卓.net.wifi.WifiInfo;
import 安卓.net.wifi.WifiManager;
import 安卓.os.Bundle;
import 安卓.os.Handler;
import 安卓.util.Log;
import 安卓.view.View;
import 安卓.view.WindowManager;
import 安卓.widget.Button;

import java.util.List;

/**
 * Created by bernardo on 19-03-2017.
 */

public class ConnectWifiActivity extends Activity {


    private WifiManager wifiManager;
    private Handler mainHandler;

    private String ssid;
    private String devName;
    private Button connectButton;

    private Thread wifiThread;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_connctwifi);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);


        Intent intent = getIntent();
        ssid= intent.getStringExtra("ssid");
        devName=intent.getStringExtra("devName");
        connectButton = (Button)findViewById(R.id.connect);

        connectButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                //connectToAP();
                wifiThread = new Thread(runnable, "turn-on wifi");
                wifiThread.start();


            }
        });
        mainHandler = new Handler(this.getMainLooper());

    }


    Runnable runnable = new Runnable() {





        @Override
        public void run() {
            while (true) {
                wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
                if (wifiManager.isWifiEnabled()) {
                    Log.d("State", "wifi-on");
                    WifiConfiguration wfc = new WifiConfiguration();

                    wfc.SSID = "\"".concat(ssid).concat("\"");
                    wfc.status = WifiConfiguration.Status.DISABLED;
                    wfc.priority = 40;
                    wfc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                    wfc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
                    wfc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
                    wfc.allowedAuthAlgorithms.clear();
                    wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
                    wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
                    wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
                    wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
                    wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
                    wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);


                    int networkId = wifiManager.addNetwork(wfc);
                    if (networkId != -1) {
                        // success, can call wfMgr.enableNetwork(networkId, true) to connect
                        wifiManager.enableNetwork(networkId, true);
                    }
                } else {
                    Log.d("not connected", "trying to connect");
                    Log.d("State", "set wifi on");

                    wifiManager.setWifiEnabled(true);
                    WifiConfiguration wfc = new WifiConfiguration();

                    wfc.SSID = "\"".concat(ssid).concat("\"");
                    wfc.status = WifiConfiguration.Status.DISABLED;
                    wfc.priority = 40;
                    wfc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                    wfc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
                    wfc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
                    wfc.allowedAuthAlgorithms.clear();
                    wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
                    wfc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
                    wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
                    wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
                    wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
                    wfc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);


                    int networkId = wifiManager.addNetwork(wfc);
                    if (networkId != -1) {
                        // success, can call wfMgr.enableNetwork(networkId, true) to connect
                        wifiManager.enableNetwork(networkId, true);
                    }
                }
            }
        }
    };


}

活动连接WiFi。xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:tools="http://schemas.安卓.com/tools"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"

    tools:context="bernardo.autodevconfiguration.ConnectWifiActivity">

    <Button
        安卓:text="Connect to your device"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:id="@+id/connect"
        安卓:layout_alignParentTop="true"
        安卓:layout_centerHorizontal="true"
        安卓:layout_marginTop="109dp"
        安卓:onClick="selfDestruct"/>
    </RelativeLayout>

AndroidManifest。xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    package="bernardo.autodevconfiguration">
    <uses-permission 安卓:name="安卓.permission.INTERNET" />

    <uses-permission 安卓:name="安卓.permission.CHANGE_CONFIGURATION" />

    <uses-permission 安卓:name="安卓.permission.CHANGE_NETWORK_STATE" />
    <uses-permission 安卓:name="安卓.permission.ACCESS_NETWORK_STATE" />
    <uses-permission 安卓:name="安卓.permission.ACCESS_WIFI_STATE" />
    <uses-permission 安卓:name="安卓.permission.CHANGE_WIFI_STATE" />



    <application
        安卓:allowBackup="true"
        安卓:icon="@mipmap/ic_launcher"
        安卓:label="@string/app_name"
        安卓:roundIcon="@mipmap/ic_launcher_round"
        安卓:supportsRtl="true"
        安卓:theme="@style/AppTheme">
        <activity 安卓:name=".MainActivity">
            <intent-filter>
                <action 安卓:name="安卓.intent.action.MAIN" />

                <category 安卓:name="安卓.intent.category.LAUNCHER" />
                <action 安卓:name="安卓.net.wifi.WIFI_STATE_CHANGED" />
                <!--<action 安卓:name="安卓.net.wifi.STATE_CHANGE" />-->


                <category 安卓:name="安卓.intent.category.DEFAULT" />
            </intent-filter>


        </activity>
        <activity
            安卓:name="bernardo.autodevconfiguration.ConnectWifiActivity">

共 (0) 个答案